from librpg.util import IdFactory

# Definitions #########################

class UnitClass(object):

    id = None
    'Unique id.'

    name = 'UnitClass'
    'Class name as it should be displayed.'

    description = ''
    'Class description.'

unit_class_factory = IdFactory()


# Melee Warriors ######################

class BarbarianClass(UnitClass):
    id = 'barbarian'
    name = 'Barbarian'
    description = 'Wrestling and melee unarmed combat.'
unit_class_factory.register(BarbarianClass)

class IceFencerClass(UnitClass):
    id = 'ice fencer'
    name = 'Ice Fencer'
    description = 'Elemental swordsman, combines ice magic with sword '\
                  'techniques.'
unit_class_factory.register(IceFencerClass)

class CyborgClass(UnitClass):
    id = 'cyborg'
    name = 'Cyborg'
    description = 'Technological skills.'
unit_class_factory.register(CyborgClass)

class GladiatorClass(UnitClass):
    id = 'gladiator'
    name = 'Gladiator'
unit_class_factory.register(GladiatorClass)
 
class MasterOfArmsClass(UnitClass):
    id = 'master of arms'
    name = 'Master of Arms'
unit_class_factory.register(MasterOfArmsClass)

class ShadowWarriorClass(UnitClass):
    id = 'shadow warrior'
    name = 'Shadow Warrior'
unit_class_factory.register(ShadowWarriorClass)

class PaladinClass(UnitClass):
    id = 'paladin'
    name = 'Paladin'
unit_class_factory.register(PaladinClass)


# Ranged Warriors #####################

class ArcherClass(UnitClass):
    id = 'archer'
    name = 'Archer'
    description = 'Bow and arrow techniques.'
unit_class_factory.register(ArcherClass)

class SniperClass(UnitClass):
    id = 'sniper'
    name = 'Sniper'
    description = 'Aiming, target locking and camouflaging.'
unit_class_factory.register(SniperClass)

class ZenArcherClass(UnitClass):
    id = 'zen archer'
    name = 'Zen Archer'
    description = 'Fire arrows aimed with the power of meditation.'
unit_class_factory.register(ZenArcherClass)


# Wilderness Professionals ############

class RangerClass(UnitClass):
    id = 'ranger'
    name = 'Ranger'
    description = 'Survival and nature related skills.'
unit_class_factory.register(RangerClass)

class HunterClass(UnitClass):
    id = 'hunter'
    name = 'Hunter'
    description = 'Bow techniques and monster capturing.'
unit_class_factory.register(HunterClass)

class TamerClass(UnitClass):
    id = 'tamer'
    name = 'Tamer'
    description = 'Capturing and keeping monsters under control.'
unit_class_factory.register(TamerClass)

class TreasureHunterClass(UnitClass):
    id = 'treasure hunter'
    name = 'Treasure Hunter'
    description = 'Looking for hidden treasures and exploring dungeons.'
unit_class_factory.register(TreasureHunterClass)


# Urban Professionals #################

class DoctorClass(UnitClass):
    id = 'doctor'
    name = 'Doctor'
    description = 'HP and status ailments recovery.'
unit_class_factory.register(DoctorClass)

class TinkererClass(UnitClass):
    id = 'tinkerer'
    name = 'Tinkerer'
    description = 'Mechanical and scrap building skills.'
unit_class_factory.register(TinkererClass)
    
class AlchemistClass(UnitClass):
    id = 'alchemist'
    name = 'Alchemist'
    description = 'Potion brewing and metal transforming skills.'
unit_class_factory.register(AlchemistClass)

class BlacksmithClass(UnitClass):
    id = 'blacksmith'
    name = 'Blacksmith'
    description = 'Metal work and welding skills.'
unit_class_factory.register(BlacksmithClass)
    
class LyristClass(UnitClass):
    id = 'lyrist'
    name = 'Lyrist'
    description = 'Improving morale and buffing whole party.'
unit_class_factory.register(LyristClass)


# Mages ###############################
    
class RedMageClass(UnitClass):
    id = 'red mage'
    name = 'Red Mage'
    description = 'Multi elemental mage.'
unit_class_factory.register(RedMageClass)

class NecromancerClass(UnitClass):
    id = 'necromancer'
    name = 'Necromancer'
    description = 'Raises dead minions.'
unit_class_factory.register(NecromancerClass)

class SnakeSorcererClass(UnitClass):
    id = 'snake sorcerer'
    name = 'Snake Sorcerer'
    description = 'Snake summoning and poison skills.'
unit_class_factory.register(SnakeSorcererClass)
    
class HypnotizerClass(UnitClass):
    id = 'hypnotizer'
    name = 'Hypnotizer'
    description = 'Causing sleep and confusion.'
unit_class_factory.register(HypnotizerClass)
    
class ClericClass(UnitClass):
    id = 'cleric'
    name = 'Cleric'
unit_class_factory.register(ClericClass)

    
# Others ##############################

class StudentClass(UnitClass):
    id = 'student'
    name = 'Student'
    description = 'Low attributes but may learn practically skill.'
unit_class_factory.register(StudentClass)

class FireballClass(UnitClass):
    id = 'fireball'
    name = 'Fireball'
    description = 'All and only fire skills.'
unit_class_factory.register(FireballClass)

class VampireClass(UnitClass):
    id = 'vampire'
    name = 'Vampire'
    description = 'Life and stamina draining skills.'
unit_class_factory.register(VampireClass)
